package xyz.xtt.exchange.utils;

import cn.hutool.core.getter.ArrayTypeGetter;
import cn.hutool.core.util.IdUtil;
import org.apache.commons.lang3.StringUtils;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class MyAESUtil {

    private static final String FIXED_KEY = "RY3rwascwU8cARmX3VsTTW8f";

    public static String generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(256); // 设置密钥大小（128位、192位或256位）
        return keyGenerator.generateKey().toString();
    }

    // 加密方法
    public static String encrypt(String data) throws Exception {
        if (StringUtils.isBlank(data)) {
            return "";
        }
        // 创建密钥对象
        SecretKeySpec secretKeySpec = new SecretKeySpec(FIXED_KEY.getBytes(), "AES");

        // 创建 Cipher 实例
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 使用 ECB 模式和 PKCS5 填充
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

        // 加密数据
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes); // 转为 Base64 字符串
    }

    // 解密方法
    public static String decrypt(String encryptedData) throws Exception {
        if (StringUtils.isBlank(encryptedData)) {
            return "";
        }
        // 创建密钥对象
        SecretKeySpec secretKeySpec = new SecretKeySpec(FIXED_KEY.getBytes(), "AES");

        // 创建 Cipher 实例
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 使用 ECB 模式和 PKCS5 填充
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

        // 解密数据
        byte[] decodedBytes = Base64.getDecoder().decode(encryptedData);
        byte[] originalBytes = cipher.doFinal(decodedBytes);
        return new String(originalBytes);
    }


    public static void main(String[] ages) {
        for (int i = 0; i < 8; i++) {
            Long assetId = IdUtil.getSnowflakeNextId();
            System.out.println(assetId);
        }

    }
}
